iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

在昨天的最後有提到可以使用"data"的屬性來對狀態進行操作,先來看一下實作的案例:

const count1 = Vue.createApp({
            data() {
                return {
                    price: 150,
                    quantity: 10
                }
            }
        }).mount('#app');

網頁呈現:
https://ithelp.ithome.com.tw/upload/images/20230924/20163061LV5ynFGGAh.png

現在的"price"定義為150,而我們現在可以對data進行操作,加入以下程式:

count1.$data.price = 200;

網頁呈現:
https://ithelp.ithome.com.tw/upload/images/20230924/201630617XaEG1mtCt.png

price的狀態就會由150變為200,但如果沒有在Vue.createApp的同時就將程式mount到DOM,就沒有辦法對data進行更改甚至會跳出error,這是因為可以使用這個方法是Vue.js會自動對被建立的實體加上"getter"和"setter"的特性,所以如果程式尚未執行,Vue.js就不會建立對應的"$data"。

data共用

關於使用data屬性的注意事項有一個很重要的就是,如果我們因為要建立1個以上擁有相同格式的Vue實體而將要使用的data在實體之外一起定義的話,就會導致所有Vue實體的狀態與內容同時變化無法輸入不同的資料,以下是範例:

        const price = {
            price: '100'
        };
        
        const count1 = Vue.createApp({
            data() {
                return price
            },
        }).mount('#app1');

        const count2 = Vue.createApp({
            data() {
                return price
            },
        }).mount('#app2');

網頁呈現:
ex

如果想要用這樣的方式來定義可以使用JavaScript的淺拷貝"{...data}"來將兩個data變成不同物件來回傳就可以解決這個問題。

        const price = {
            price: '100'
        };
        
        const count1 = Vue.createApp({
            data() {
                return {...price}
            },
        }).mount('#app1');

        const count2 = Vue.createApp({
            data() {
                return {...price}
            },
        }).mount('#app2');

網頁呈現:
ex2

今天對Vue.js的data屬性進行了一些更深入的了解與嘗試如果因為data共用產生問題應該如何解決,明天將繼續這樣的進度學習Vue.js,謝謝閱讀。


上一篇
D8: Vue.js2 -> Vue.js3
下一篇
D10: template & methods
系列文
從0開始學習30天可以到什麼程度?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言